Functional Abstraction
Lambda表达式所在的environment关系
如下例子
1 | a = 1 |
注意行4与行5的lambda函数的区别:
- 行4的lambda函数是f函数内定义的函数,他的父级为f,因此此时传入的a=2
- 行5的lambda函数是f函数外定义的函数,他的父级为global,因此此时传入的a=1
Choosing Names
给函数或变量命名时,要注重传达意思
命名需要传达与之相关值的意义或目的
值的类型最好记录在函数的docstring中
函数名一般包括它们的作用,表现或返回值
为一些重复使用的复合表达式命名
如果需要注释代码,命名可以长一些
如果用于数字,数学运算与函数抽象,命名可以短一些
Error&Traceback
报错有三种形式:
- Syntax errors:执行前即可发现,通常由于表达式不正确引起
- Runtime errors:执行时由python解释器发现的错误。当这些错误发生时,会得到一个Traceback,来提示是在哪里发生了何种错误,错误发生时程序在做什么
- Logical error:不会被解释器发现,需要自己进行测试发现问题
Decorator
装饰器用于给现有模块(原函数)进行功能拓展,通过接受一个函数来返回一个新的函数或修改原来的函数
例如:
1 | def trace1(fn): |
等同于
1 | def trace1(fn): |
返回值都相同
1 | >>> square(5) |